package fr.fitec.qcmPlus.actions;

import java.sql.Timestamp;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Level;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import fr.fitec.qcmPlus.actionForms.GestionCompteForm;
import fr.fitec.qcmPlus.actionForms.NouveauCompteForm;
import fr.fitec.qcmPlus.beans.Utilisateur;
import fr.fitec.qcmPlus.constants.MappingConstant;
import fr.fitec.qcmPlus.constants.QcmConstants;
import fr.fitec.qcmPlus.constants.SessionVarConstant;
import fr.fitec.qcmPlus.dao.UtilisateurDAO;
import fr.fitec.qcmPlus.exceptions.DAOException;

public class EnregistrerCompteAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		Object userId = request.getSession().getAttribute(SessionVarConstant.ID_UTILISATEUR);
    	if(userId!=null){
    		int idUtilisateur = (Integer) userId;
    		UtilisateurDAO uDao = new UtilisateurDAO();
    		Utilisateur u = uDao.findById(idUtilisateur);
    		if(u.getRole().equals(QcmConstants.ROLE_ADMIN)){
    			
    			NouveauCompteForm f = (NouveauCompteForm)form;
    		
    			Utilisateur nouvU = new Utilisateur();
    			nouvU.setNom(f.getNom());
    			nouvU.setPrenom(f.getPrenom());
    			nouvU.setMotdepasse(f.getPassword());
    			nouvU.setSociete(f.getSociete());
    			nouvU.setRole(QcmConstants.ROLE_STAGIAIRE);
    			nouvU.setStatut(QcmConstants.STATUT_ACTIF);
    			nouvU.setDate_creation(new Timestamp(new Date().getTime()));
    			
    			Utilisateur aftI = uDao.insert(nouvU);
    			if(aftI!=null)
    				return mapping.findForward(MappingConstant.SUCCESS);
    			else{
    				//msg d'erreur
    				final ActionErrors errors = new ActionErrors();
   		         errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
                 "nouveaucompte.action.erreur.doublon"));
   		            this.saveErrors(request, errors);
   		            return mapping.findForward(MappingConstant.INPUT);
    			}
    			
    		}else
    			return mapping.findForward(MappingConstant.AUTHENTIFICATION);
    	}
    	return mapping.findForward(MappingConstant.AUTHENTIFICATION);
	}	
}
